package com.screen.screendisplay.service.impl.wholeproduct;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.screen.screendisplay.entity.wholeproduct.WholeNeInstallVolume;
import com.screen.screendisplay.mapper.wholeproduct.WholeNeInstallVolumeMapper;
import com.screen.screendisplay.service.wholeproduct.IWholeNeInstallVolumeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.screen.screendisplay.vo.wholeproduct.NewEnergyInstallVolumeVO;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 新能源装机容量表 服务实现类
 * </p>
 *
 * @author xuesong
 * @since 2025-10-05
 */
@Service
public class WholeNeInstallVolumeServiceImpl extends ServiceImpl<WholeNeInstallVolumeMapper, WholeNeInstallVolume> implements IWholeNeInstallVolumeService {
    
    /**
     * 获取新能源装机容量
     * @param year 年份（可选）
     * @return 新能源装机容量列表
     */
    @Override
    public List<NewEnergyInstallVolumeVO> getNewEnergyInstallVolume(Integer year) {
        // 构建查询条件
        LambdaQueryWrapper<WholeNeInstallVolume> lqw = new LambdaQueryWrapper<>();
        if (year != null) {
            lqw.eq(WholeNeInstallVolume::getYear, year.toString());
        }
        lqw.orderByAsc(WholeNeInstallVolume::getYear);
        
        // 查询数据
        List<WholeNeInstallVolume> list = this.list(lqw);
        
        // 转换为VO
        List<NewEnergyInstallVolumeVO> result = new ArrayList<>();
        for (WholeNeInstallVolume entity : list) {
            NewEnergyInstallVolumeVO vo = new NewEnergyInstallVolumeVO();
            vo.setYear(Integer.parseInt(entity.getYear()));
            
            // 转换风电装机容量
            if (entity.getWindInstallVolume() != null && !entity.getWindInstallVolume().isEmpty()) {
                vo.setWindInstallVolume(new BigDecimal(entity.getWindInstallVolume()));
            } else {
                vo.setWindInstallVolume(BigDecimal.ZERO);
            }
            
            // 转换光伏装机容量
            if (entity.getPvInstallVolume() != null && !entity.getPvInstallVolume().isEmpty()) {
                vo.setPvInstallVolume(new BigDecimal(entity.getPvInstallVolume()));
            } else {
                vo.setPvInstallVolume(BigDecimal.ZERO);
            }
            
            result.add(vo);
        }
        
        return result;
    }
}

